from django.shortcuts import render

# Create your views here.
from django.views import View
from apps.areas.models import Area
from django.http import JsonResponse

'''
sql查询：
   省：select * from tb_areas where parent_id is null;
   市：select * from tb_areas where parent_id=省份id;
   区/县：select * from tb_areas where parent_id=城市id;
   
orm查询：
省信息查询：
    Area.objects.filter(parent=None)
    Area.objects.filter(parent_id=None)
    Area.objects.filter(parent__isnull=True)
    Area.objects.filter(parent_id__isnull=True)
    
城市信息查询：
    Area.objects.filter(parent=省份id)
    
区县信息： 
    Area.objects.filter(parent=城市id)
'''
class AreaView(View):
    def get(self,request):
        province_list = cache.get('province')
        if province_list is None:
            provinces = Area.objects.filter(parent = None)
            province_list=[]
            for province in provinces:
                province_list.append(
                    {
                        'id':province.id,
                        'name':province.name
                    }
                )
            cache.set('province', province_list,3600 * 24)

        return JsonResponse({'code':0,'errmsg':'ok','province_list':province_list})


'''
需求：
    获取市/区 信息

前端：
    当修改/增加 省 市/区县信息时发送axios请求 获取下级信息

后端：
    请求：
        传递省 市 id值

    业务逻辑：
        根据id查询对应信息 将查询信息转成列表子字典

    响应：
        json

    路由：
        areas/id/

    步骤：
        1. 获取省份/市 通过id进行查询
        2. 将查询结果转成json
        3. 返回响应     
'''

'''
缓存设置的注意事项：
    因为城市与区县信息需要id进行查询

    如果设置的key为city的话
    第一次会保存第一次选择的省份以及城市区县信息

    第二次查询会直接查询city这个key而不进行修改
    原因是key值如果相同 则不改变当前数据[value]
'''
from django.core.cache import cache
class SubAreaView(View):
    def get(self,request,id):
        data_list = cache.get('city%s'%id)
        if data_list is None:
            up_level = Area.objects.filter(id=id).first()
            down_level = up_level.subs.all()
            data_list = []
            for data in down_level:
                data_list.append({
                    'id':data.id,
                    'name':data.name
                })
            cache.set('city%s'%id,data_list,3600 * 24)

        return JsonResponse({'code':0,'errmsg':'ok','sub_data':{'subs':data_list}})








